[レポート]意味検出に必要なのは注意力だけ:ニューラル・シンボリック・アプローチによる新しい変換器 - CODE BLUE 2024 #codeblue_jp
こんにちは、臼田です。
みなさん、セキュリティ対策してますか?(挨拶
今回はCODE BLUE 2024で行われた以下のセッションのレポートです。
意味検出に必要なのは注意力だけ:ニューラル・シンボリック・アプローチによる新しい変換器
大規模なサンプルから、専門家が分析する労力に見合う少数のユニークなバイナリを特定するには、自動サンドボックス・エミュレーションやAI検出エンジンなど、インシデント対応の限られた期間内に人的コストを削減するために、重複の多いプログラムファイルを除外するフィルタ技術が不可欠である。 VirusTotalが2021年に報告したように、15億サンプルのうち90%は重複しているが、難読化のためマルウェアの専門家が検証する必要がある。
本研究では、未知のAPIコールの中のUse-defineチェーンのテイント分析など、専門家の分析戦略をシミュレートするために、新しいニューラルネットワークベースのシンボリック実行LLMであるCuIDAを提案した。本手法は、APIのコンテキストを自動的理解し、(a.)動的APIソルバー、(b.)シェルコードの動作推論、(c.)アンパックなしの商用パッカー検出など、最も困難な検出ジレンマにおいて難読化された動作を発見することに成功した。
Speakers: Mars Cheng
レポート
- 参考資料: https://i.blackhat.com/BH-US-24/Presentations/REVISED_US24-Ma-Attention-Is-All-You-Need-for-Semantics-Detection-A-Novel-Transformer-on-Neural-Symbolic-Approach-Thursday.pdf
- AIのアプリが人気になっている
- 難読化やパッケージ化されたマルウェアについてみていく
- 背景
- ブルーチームが直面している課題
- 難読化が進んでいる
- パッカーにかかったものがたくさんある
- WindowsのShellCodeを見つけるのが困難
- マルウェアのアナリストが時間をかけて難読化されたものを解読できることもある
- しかし人間の専門家には限りがある
- 作業負荷も大きい
- 自動化をしたい
- AIモデルを使って自動化して大規模でタイムリーで正確な分析がしたい
- APIのセマンティック分析として分析する
- しかし人は少ない
- 見落としもある
- すべてをカバーしたい
- 人間がどうやって推測するか
- 例えばWindowsのAPIでパラメータが7つなら特定しやすい
- しかし4つなら?
- データタイプも使って判断する
- ブルーチームが直面している課題
- どうやって変換器を使うか
- CuIDAという名前をつけた
- 未知のAPIを特定する仕組みとして考えた
- 研究にあたりいろんな論文を調べた
- Recap Cylance Research in NDSS 2018
- 関連付けに問題がある
- Scaled Dot-Product Attention
- 人間の専門家をつかって行動分析をしたい
- 人間の理解プロセスを分析して自動化したい
- 実用事例
- バイナリレベルのセマンティックを埋め込むことで実現
- 引数の値をバイナリから得ることができる
- マジックナンバーに置き換えて、それを識別する
- Windowsでは128TBにもなるのでベクトルDBが必要
- サイズを縮小しなければいけない
- 数字がメモリであるか分析、メモリであれば実行可能か確認する
- Windowsではいろんな決まりがある
- バイナリの質が高い
- 国レベルのハッカーは検知の対象とならないように隠すため
- CuIDAを使って検出する
- 引数の値が0,0,0,0,0となっているものはネットワークオープン
- 様々なマジックナンバーがわかる
- 使おうとしているAPIの正確な名前を推測する
- 難読化バイナリを検索してみた
- 実際に隠されたAPIコールをチェックした
- 攻撃者がよく使う2つの回避戦略を発見した
- VMなどの下で使う
- 攻撃の振る舞いをわからないようにする
- ハイブリッドコードを悪用する
- 分析結果
- 400以上のバイナリを取得
- あるマルウェアにCILとC++のハイブリッド
- 我々のツールで検出できた
- バイナリレベルのセマンティックを埋め込むことで実現
- 事例2
- シェルコードのそれぞれをウォークスルーする
- 実行されている未知のAPIを確認する
- デモ
- 実行するとTop5のAPIが出てくる
- どの関数だと思われるか特定する
- 保護コードを検出する
- 従来ならリバースエンジニアリング
- 商用のパッカーはオリジナルのエンドポイントを見つからいようにする
- VMProtectそのもの
- 人間のアナリストによってunpackしたもの
- Themida
- うまく機能することを確認した
- まとめ
- まだ様々な制約がる
- マルチスレッドなど
- コミュニティのディスアセンブラでも80%しか検出しない
- CuIDAはOSSで公開しているから使って
- まだ様々な制約がる
感想
これまで人が行っていたことをAIを利用してうまくやる試みは面白いですね。
他のセッションにも繋がりますが、AIとセキュリティの取り組みは試していきたいですね。